
class Usuario ():

    def __init__ (self, cpf, senha):
        self._cpf = cpf
        self._senha = senha
    
    def getCPF (self): 
        return self._cpf

    def getSenha (self):
        return self._senha

    def setSenha (self,senha):
        self._senha = senha
       
    def checarUsuario (self, arquivo):
         
        usuarios = open (arquivo, "r")
        lista_usuarios = usuarios.readlines ()
        usuarios.close ()
        for linha in lista_usuarios:
            lista = linha.rsplit ("\t")
            if (self._cpf == lista[0] and self._senha == lista[1]):
                return True


class Funcionario (Usuario):

    def __init__ (self, cpf, senha):
        Usuario.__init__ (self, cpf, senha)
    

    def PesquisaCliente():
         pass
     
    def imprimeRelatorioCliente():
         pass

   
class Gerente (Usuario):


    def __init__ (self, cpf, senha):
        Usuario.__init__ (self, cpf, senha)
                        


class CadastroGerente ():


     def __init__ (self):                  
          arquivo = open ('Gerente.txt', 'r')
          self._gerente = arquivo.readlines ()
          arquivo.close ()

     def adicionarGerente (self, cpf, senha):
        
          novogerente = Gerente (cpf, senha)
          self._gerente.append (str (str (novogerente.getCPF ())) + '\t' + str (novogerente.getSenha ())  + '\n')
          self.adicionarNoArquivo (self._gerente)
          print ('\nCadastro realizado com sucesso!\n')

     def removerGerente (self, cpf, senha):
    
          for linha in self._gerente :
               dados_gerente = linha.rsplit ('\t')
               if str (cpf) == dados_gerente [0] and str (senha) == dados_gerente [1]:
                    os.remove ('Gerente.txt')    # remove o  arquivo do gerente
                    print ('\nCadastro excluído!\n')
                    break
               else:
                    print ('\nUsuário inválido!')

     def adicionarNoArquivo (self,lista):
          ''' função auxiliar '''
          arquivo = open ('Gerente.txt', 'w')
          arquivo.writelines (lista)
          arquivo.close ()

     def alterarSenha (self, senha, novasenha):
          dados_gerente = self._gerente [0].rsplit ('\t')

          if dados_gerente [1] == senha:
               dados_gerente [1] = str (novasenha)
               self.adicionarNoArquivo (dados_gerente [0] +'\t' +dados_gerente [1] + '\t' + dados_gerente [2] + '\n')
               print ('\nAlteração realizada com sucesso!\n')
               return True
          
          else:
               print ('\n Senha Incorreta!\n')
               return False
                    

class CadastroFuncionarios ():


     def __init__ (self):   # otimiza para não está abrindo toda vez o arquivo 
          arquivo = open ('Funcionarios.txt', 'r')
          self._funcionarios = arquivo.readlines ()
          arquivo.close ()


     def verificarCPF (self, cpf):   # função auxiliar da adicionar funcionario
          if self._funcionarios == []:  # se a lista esta vazia, deixa cadastrar
               return True

          else:
               for funcionario in self._funcionarios:
                    dados_funcionario = funcionario.rsplit ('\t')
                    
                    if dados_funcionario [0] == cpf:    # se já tiver o cpf ele não deixa cadastrar
                         print ('\nO cadastro já existe!\n')
                         return False

                    else:
                         return True

               
     def adicionarFuncionario (self, cpf, senha):
          if self.verificarCPF (cpf) == True:
               novofuncionario = Funcionario (cpf, senha)
               self._funcionarios.append (str (novofuncionario.getCPF ()) +'\t' +str (novofuncionario.getSenha ()) + '\n')
               self.adicionarNoArquivo (self._funcionarios)
               print ('\nCadastro realizado com sucesso!\n')
               

     def alterarSenha (self, senha, novasenha):
          for funcinario in self._funcionarios:
               dados_funcionario = funcionario.rsplit ('\t')    # cada linha se trasforma numa lista de 2 atributos( cpf, senha )

               if dados_funcionario [1] == senha:
                    senha = str (novasenha)
                    self._funcionarios.append (dados_funcionario [0] +'\t' + senha + '\t' + dados_funcionario [2] + '\n')
                    self._funcionarios.remove (funcionario)
                    self.adicionarNoArquivo (self._funcionarios)
                    print ('\nAlteração realizada com sucesso!\n')
                    return True

          else:
               print ('\n Senha Incorreta!\n')
               return False



     def adicionarNoArquivo (self,lista):         # função auxiliar das outras funçãoes
          arquivo = open ('Funcionarios.txt', 'w')
          arquivo.writelines (lista)
          arquivo.close ()

     def removerFuncionario (self, cpf, senha):
    
          for linha in self._funcionario :
               dados_funcionario = linha.rsplit ('\t')
               if str (cpf) == dados_funcionario [0] and str (senha) == dados_funcionario [1]:
                    os.remove ('Funcionarios.txt')    # remove o  arquivo do funcionario
                    print ('\nCadastro excluído!\n')
                    break
               else:
                    print ('\nUsuário inválido!')
